/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;
import java.util.*;

/**
 *
 * @author neochange
 */
import java.io.Serializable;
public class estrucalim implements Serializable{
    

private List<alimento>[] tabla;
   

public estrucalim(){
tabla = new ArrayList[50];
for(int i=0;i<50;i++){
    tabla[i]=new ArrayList<alimento>();

}

}

public boolean añadir_alimento(alimento a)
{
int h = hash(a.Get_Nombre());

// hay que recorrer para ver si ya está y entonces no añadir
int cont = 0;
boolean y=false;
while(cont<tabla[h].size()){
	if((tabla[h].get(cont).Get_Nombre()).equals(a.Get_Nombre())){
	y=true;
	}
	cont++;
}

if(!y){tabla[h].add(a);}
    

return !y;
}

public boolean modificar_alimento(alimento a)
{

int h = hash(a.Get_Nombre());
boolean r = false;

int i=0;

while(i<tabla[h].size() && !r)
{
    if((tabla[h].get(i).Get_Nombre()).equals(a.Get_Nombre()))
    {
    r = true;    
    tabla[h].remove(i);
    }
    i++;
}


if(r){añadir_alimento(a);}

return r;
}



public alimento consultar_alimento(String Nombre)
{
int h = hash(Nombre);
boolean z = false;
alimento b = new alimento();
if(!tabla[h].isEmpty()){
    
    Iterator it = tabla[h].iterator();
    int cont = 0;
    while(it.hasNext() && !z)
    {
        b = tabla[h].get(cont);
        z = b.Get_Nombre().equals(Nombre);
        cont++;
        it.next();
    }
    if(!z){b=null;}

}
else{b=null;}

return b;    
}

public void eliminar_alimento (String Nombre)
{
int h = hash(Nombre);
if(!tabla[h].isEmpty()){

	int i=0;
	while(i<tabla[h].size())
	{
	    if((tabla[h].get(i).Get_Nombre()).equals(Nombre)){
	        tabla[h].remove(i);
	     } 
        i++;
	}
}
}

public List<alimento> consultar_alimentos (int T_Alimentos, String[] Clasificacion, Interval Disponibilidad,int Precio,int prec){
//prec indica si queremos que el precio se tenga en cuenta por debajo(-1),igual(0) o por encima(1)

 List<alimento> a = new ArrayList();
 int alt=0;
 int cont;
 
 while(alt<tabla.length){
        
        Iterator i = tabla[alt].iterator();
        cont=0;
        if(tabla[alt].isEmpty()){}
        else{
            
            while(i.hasNext()){
                
                if((tabla[alt].get(alt)).cumple(T_Alimentos, Clasificacion, Disponibilidad, Precio, prec)){
                a.add(tabla[alt].get(alt));
                }
                i.next();
                cont++;
            }
        }
        alt++;
 }
 
 return a;   
}

public List<alimento> consultar_alimentosclas(String clas){

 List<alimento> a = new ArrayList();
 int alt=0;
 int cont;
 int clasi;
 
 /*if(clas.equals("principal")){clasi=100;}
 else{clasi=10;}*/
 
    while(alt<tabla.length){
        
        Iterator i = tabla[alt].iterator();
        cont=0;
        if(!tabla[alt].isEmpty()){
            
            while(i.hasNext()){
                if(tabla[alt].get(cont).Get_clasificacion().equals(clas)){
                a.add(tabla[alt].get(cont));
                }
                i.next();
                cont++;
            }
        }
        alt++;
 }
 
 return a;   
}

public List<alimento> consultar_alimentos(){

 List<alimento> a = new ArrayList();
 int alt=0;
 int cont;
  
 
    while(alt<tabla.length){
        
        Iterator i = tabla[alt].iterator();
        cont=0;
        if(!tabla[alt].isEmpty()){
            
            while(i.hasNext()){
                a.add(tabla[alt].get(cont));
                i.next();
                cont++;
            }
        }
        alt++;
 }
 
 return a;   
}

public boolean compr_existencia(List<String> listal){

    boolean a = true;

    int y=0;
    while(y<listal.size() && a)
    {
        if(consultar_alimento(listal.get(y))==null){
        a=false;
        }
        y++;        
    }


return a;
}


private int hash(String a)
{
char b,c,d;
if(a.length()>2){
b=a.charAt(0);
c=a.charAt(1);
d=a.charAt(2);
}
else if(a.length()==2){
b=a.charAt(0);
c=a.charAt(1);
d=a.charAt(1);

}
else{
b=a.charAt(0);
c=a.charAt(0);
d=a.charAt(0);
}

return (((int)b+(int)c+(int)d)%50);
}



}
